package j.util.jdbc.simple.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 实体类与数据库表中字段的映射
 */
@Target({FIELD})
@Retention(RUNTIME)
public @interface Column {
	/**
	 * 数据库表中的字段名称
	 * @return
	 */
	String name() default "";

    /**
     * 显示名称
     * @return
     */
    String displayName() default "";
	/**
	 * 数据类型，默认为AUTO，即类型取决于实体属性类型
	 * @return
	 */
	DataType datatype() default DataType.AUTO;
	/**
	 * 数据库中该字段是否设置有默认值，默认没有默认值
	 * 数据库中若有默认值，且该字段又不允许空，则在生成insert语句时，可忽略该字段
	 * @return
	 */
	boolean hasDefaultValue() default false;
	/**
	 * 该值是否为空，默认是，该值仅对insert语句产生影响
	 * @return
	 */
	boolean nullable() default true;

    /**
     * 若为字符串，则为最小长度
     * 若为数字类型，则大小的小值
     * @return
     */
    int min() default Integer.MIN_VALUE;

    /**
     * 若为字符串，则为最大长度
     * 若为数字类型，则大小的大值
     * @return
     */
    int max() default Integer.MAX_VALUE;
	/**
	 * 若为true,在与数据库映射时该字段时不生效
	 * @return
	 */
	boolean noUsed() default false;

    /**
     * 在生成insert语句时,是否放在insert字段列表中,默认是
     * @return
     */
    boolean insertable() default true;

    /**
     * 在生成update语句时,是否放在update字段列表中
     * @return
     */
    boolean updatable() default true;

    /**
     * 在view.getBean时，是否需要des解密
     * @return
     */
    boolean needDes() default false;
}
